package _01_动态数组;

import java.util.Arrays;

/**
 * https://leetcode-cn.com/problems/merge-sorted-array/
 *
 * @Author: haogege
 * @Date: 2021/8/26
 */
public class _88_合并两个有序数组 {

    public static void main(String[] args) {
        int[] nums1 = {2, 0};
        int m = 1;
        int[] nums2 = {1};
        int n = 1;
        _88_合并两个有序数组 v = new _88_合并两个有序数组();
        v.merge(nums1, m, nums2, n);

        System.out.println(Arrays.toString(nums1));
    }

    /**
     * 准备2个指针，分别指向两个数组的尾部元素，判断谁比较大
     * 再次准备一个指向，指向存放元素的索引位置，初始索引为num1的最后元素。
     * 大的放在位置指针。并且指针--。当第二个数组的索引越界后结束循环，
     *
     * @param nums1
     * @param m
     * @param nums2
     * @param n
     */
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int position = nums1.length - 1;
        int p1 = m - 1;
        int p2 = n - 1;
        while (p2 >= 0) {
            if (p1 >= 0 && nums2[p2] < nums1[p1]) {
                nums1[position--] = nums1[p1--];
            } else {
                nums1[position--] = nums2[p2--];
            }
        }
    }

}
